perm filename APP4[AIM,DBL]1 blob
sn#124700 filedate 1974-10-17 generic text, type T, neo UTF8
00100 .DEVICE XGP
00200 .FONT 1 "NGR20"
00300 .FONT 2 "SIGN57"
00400 .FONT 3 "SHD40"
00500 .FONT 4 "BDI25"
00600 .FONT 5 "GRFX25.FNT[AIM,DBL]"
00700 .FONT 6 "FIX25"
00800 .PAGE FRAME 69 HIGH 130 WIDE
00900 .AREA TEXT LINES 4 TO 67 IN 1 COLUMNS 130 WIDE
01000 .TITLE AREA HEADING LINES 1 TO 3 IN 1 COLUMNS 75 WIDE
01100 .TITLE AREA FOOTING LINE 69 IN 1 COLUMNS 75 WIDE
01200 .TURN ON "↓_π{"
01300 .TURN ON "\" FOR "%"
01400 .MACRO B ⊂ BEGIN VERBATIM GROUP ⊃
01500 .MACRO E ⊂ APART END ⊃
01600 .TABBREAK
01700 .COMPACT
01800 .EVERY FOOTING(Fourth Draft .... {DATE},page A4.{IF PAGE = 1 THEN 1 ELSE PAGE},CF Program excerpts\*)
01900 .EVERY HEADING(\3BEINGS\*,,\4Doug Lenat\*)
02000 .COUNT PAGE PRINTING "1"
02100 .NEXT PAGE
02200
02300 \2APPENDIX 4. \* \3CF .... PROGRAM\*
02400
00100 .GROUP SKIP 10
00200 .SELECT 6
00300 .NOFILL
00400 This appendix opens a detailed example of PUP6 in operation.
00500 Fragments of the target concept formation program are exhibited, and
00600 on page A4.7 is a flowchart for a hand-coded version of CF, the
00700 target concept formation program discussed earlier. Like PUP6, both
00800 hand-coded and synthesized versions of CF are written in INTERLISP
00900 [Teitelman, 197?] with slight additions (setdifference, disk-dump,
01000 etc.) only. Following each hand-coded piece comes the
01100 corresponding BEING version created by PUP6. Some functions
01200 mentioned are system functions used to augment the language (e.g.,
01300 MATCH, nondeterministic CHOOSE-FROM.) A few functions have been
01400 omitted to aid in readability (e.g., VECTOR and TUPLE, which are
01500 inverse quote forms of the function LIST). The reader should examine
01600 the META:CODE sections of each BEING; they contain much of the
01700 \4executable\* code of the BEING. The choice of functions, while
01800 not a random sample, is not intentionally biassed. The opening,
01900 top-level functions are shown (by hand and by PUP6), and then a very
02000 low-level maintenance function (delete a feature from the NO
02100 relations of a model) is exhibited.
02200
02300 The next phase of the extended CF example is found in Appendix 5.
02400 There is a transcript of the dialogue between the user and PUP6 which
02500 produced this synthesized code. User responses are italicized to ease
02600 the reading. Notice how the user may interrupt and ask PUP6 for
02700 clarification.
02800
02900 The sixth appendix section presents a session with this synthesized
03000 program itself running. During the exectution of CF, the user stops
03100 and occasionally ask it questions; the answers are not particularly
03200 impressive, but they are at the same level as those one gets from
03300 PUP6.
00100 .SELECT 1
00200 .NOFILL
00300
00400
00500
00600 \4The top-level functions do initialization and repeatedly build up models:\*
00700
00800 (CF
00900 [LAMBDA NIL
01000 (INITIALIZE:1)
01100 (PARTITION:A:DOMAIN])
01200
01300 (INITIALIZE:1
01400 [LAMBDA NIL
01500 (SETQ YES:RELATIONS (QUOTE YES:RELATIONS))
01600 (SETQ NO:RELATIONS (QUOTE NO:RELATIONS))
01700 (SETQ MAYBE:RELATIONS (QUOTE MAYBE:RELATIONS))
01800 (SETQ CLASS:OBJECTS (QUOTE CLASS:OBJECTS))
01900 (SETQ CLASS:NAMES:ORDERING (QUOTE CLASS:NAMES:ORDERING))
02000 (SETQ IN (QUOTE IN))
02100 (SETQ UNTIL (QUOTE UNTIL))
02200 (SETQ CLASS:RELATIONS (QUOTE CLASS:RELATIONS))
02300 (SETQ DO (QUOTE DO))
02400 (SETQ FOR (QUOTE FOR))
02500 (SETQ FROM (QUOTE FROM))
02600 (SETQ TO (QUOTE TO))
02700 (SETQ USING (QUOTE USING))
02800 (SETQ LIST:OF:POSSIBLE:CLASS:NAMES NIL)
02900 (SETQ FILE:NAME (ASK:FOR:2])
03000
03100 \4The BEING version uses a list of initializations to do at LOAD time\*
03200
03300 (RPAQQ GLOBAL:INITIALIZATION:LIST (
03400 (SETQ TYPE:OF:C:F CLASSIFICATORY:CONCEPT:FORMATION)
03500 (SETQQ HALT HALT)
03600 (SETQQ NAME:OF:CLASS NAME:OF:CLASS)
03700 (SETQQ SET:OF:POSSIBLE:NAMES:OF:CLASS NIL)
03800 (SETQQ ALPHORDER ALPHORDER)
03900 (SETQQ NOTHING NOTHING)
04000 (SETQQ POSSIBLE:NAME:OF:CLASS POSSIBLE:NAME:OF:CLASS)
04100 (SETQQ MAYBE:RELNS:30 MAYBE:RELNS:30)
04200 (SETQQ YES:RELNS:28 YES:RELNS:28)
04300 (SETQQ ELEMENT:RELNS:15 ELEMENT:RELNS:15)
04400 (SETQQ NO:RELNS:29 NO:RELNS:29)
04500 (SETQQ POSSIBLE:NAME:OF:CLASS:OBJECTS:20 POSSIBLE:NAME:OF:CLASS:OBJECTS:20)
04600 (SETQQ ELEMENT:OBJECTS:11 ELEMENT:OBJECTS:11)
04700 (SETQQ CLASS:MAYBE:RELNS:37 CLASS:MAYBE:RELNS:37)
04800 (SETQQ CLASS:NO:RELNS:36 CLASS:NO:RELNS:36)
04900 (SETQQ CLASS:YES:RELNS:35 CLASS:YES:RELNS:35)
05000 (SETQQ CLASS:CLASSNAME:34 CLASS:CLASSNAME:34)
05100 (SETQQ CLASS:OBJECTS:33 CLASS:OBJECTS:33)
05200 (SETQQ ??? ???)))
05300
05400 (PUTPROPS CF:1 IDEN ((( ( (MEMBER LI (QUOTE ((CONCEPT FORMATION)
05500 (CF:1)
05600 (CONCEPT LEARNING)
05700 (FORM CONCEPTS)
05800 (LEARN CONCEPTS)
05900 (LEARNS CONCEPTS)
06000 (FORMS CONCEPTS))))))
06100 ( CF:1)))
06200 EXPLICIT:ARGS:CHECK T
06300 WHAT ( A SPECIALIZED BEING WHICH DOES
06400 ( LEARN HOW TO IMPOSE A CONCEPT STRUCTURING UPON A DOMAIN; LEARN HOW TO
06500 CHARACTERIZE, OR AT LEAST DISTINGUISH, VARIOUS CONCEPTS))
06600 HOW ( BY CHOOSING THE DESIRED TYPE OF CONCEPT FORMATION CALLED FOR, AND THEN CARRYING IT OUT)
06700 WHY ( CONCEPT:LEARNING IS NECESSARY TO CONCEPT KNOWLEDGE AND CONCEPT:FORMATION IS TOO GENERAL TO
06800 USE AS IT IS)
06900 MAIN:EFFECTS ((( ABLE PUP ( LEARN CONCEPTS))
07000 ( CF:1)))
07100 WHEN (((MEMBER TYPE:OF:C:F ABLE:PUP:LIST)
07200 -70
07300 ( BECAUSE IF WE CAN ALREADY DO ( TYPE:OF:C:F)
07400 THEN WE SHOULDNT TRY TO DO IT OVER AGAIN))
07500 ((MEMBER (QUOTE (CHARACTERIZE CLASSES))
07600 PUP:WANTS:LIST)
07700 88
07800 (QUOTE (BECAUSE CONCEPT FORMATION IS A GOOD WAY TO GET A CHARACTERIZATION OF CLASSES)))
07900 (T (COND (NEW:INFO:LIST -60)
08000 (T 40))
08100 (QUOTE (BECAUSE NEW INFORMATION MIGHT ALTER OUR COURSE OF ACTION))))
08200 \4META:CODE\* (TEMPORARILY (PAD:2))
08300 PRE:REQUISITES (( AWARE USER ( PUP IS ABOUT TO WORK ON CONCEPT FORMATION))
08400 ( AWARE USER ( THE TYPE OF CONCEPT FORMATION PUP IS ABOUT TO WORK ON IS
08500 ( TYPE:OF:C:F))))
08600 POST:REQUISITES (( AWARE USER ( PUP HAS THOUGHT ABOUT THE ( TYPE:OF:C:F)
08700 TYPE OF CONCEPT:FORMATION)))
08800 DEMONS ( INFERENCE:DEMONS ATTENTION:DEMONS)
08900 AFFECTS ()
09000 COMPLEXITY: (.8 .8 .8 .8 .1)
09100 GENERALIZATIONS (CONCEPT:FORMATION ATTEND LEARN INDUCTIVE:INFERENCE)
09200 SPECIALIZATIONS NIL
09300 ALTERNATIVES ((GRAMMATICAL:INFERENCE PATTERN:RECOGNITION SIMULATED:EVOLUTION))
09400 BEING T
09500 EXPLICIT:ARGS (DUMMY:ARGUMENT:3 DUMMY:ARGUMENT:2 DUMMY:ARGUMENT:1))
09600
09700 \4Notice that both versions' CF functions just call PARTITION:A:DOMAIN\*
09800
09900 (PARTITION:A:DOMAIN
10000 [LAMBDA NIL
10100 (PROG NIL
10200 START:OF:SERIES
10300 (INPUT:1:ELEMENT)
10400 (COND
10500 ((HAS:NAME)
10600 (INPUT:2:CLASS:NAME))
10700 (T (DETERMINE:1:CLASS:NAME)))
10800 (COND
10900 ((EQUAL CLASS:NAME (QUOTE HALT))
11000 (HALT:1))
11100 (T (PRINT (QUOTE (I NOW KNOW)))
11200 [FOREACH (QUOTE NAME) IN LIST:OF:POSSIBLE:CLASS:NAMES
11300 DO (QUOTE (PROGN (PRINT NAME)
11400 [COND
11500 ((GETP NAME CLASS:OBJECTS)
11600 (PRIN1 (QUOTE "OBJECTS "))
11700 (PRINT (GETP NAME CLASS:OBJECTS]
11800 [COND
11900 ((GETP NAME YES:RELATIONS)
12000 (PRIN1 (QUOTE "MUST HAVE "))
12100 (PRINT (GETP NAME YES:RELATIONS]
12200 [COND
12300 ((GETP NAME NO:RELATIONS)
12400 (PRIN1 (QUOTE "MUSNT HAVE "))
12500 (PRINT (GETP NAME NO:RELATIONS]
12600 (COND
12700 ((GETP NAME MAYBE:RELATIONS)
12800 (PRIN1 (QUOTE "MAY HAVE "))
12900 (PRINT (GETP NAME
13000 MAYBE:RELATIONS]
13100 (GO START:OF:SERIES])
13200
13300 \4The BEING version of PARTITION is quite similar.
13400 Notice the use of comments: though written by PUP6 for its own use,
13500 they are also meaningful to the user.\*
13600
13700 (PUTPROPS PAD:2 IDEN ((( ( (MATCH ( PARTITION A DOMAIN)
13800 LI)))
13900 ( PAD:2))
14000 (( ( (MATCH ( DIVIDE A DOMAIN UP)
14100 LI)))
14200 ( PAD:2)))
14300 IMPLICIT:ARGS (PRESULT)
14400 EXPLICIT:ARGS:CHECK T
14500 WHAT ( A SPECIALIZED BEING WHICH DOES
14600 ( DIVIDE A DOMAIN INTO SUBDOMAINS; USUALLY THESE WILL BE DISJOINT, AND THEIR UNION
14700 WILL BE THE ENTIRE DOMAIN))
14800 HOW ( BY BUILDING UP THE PARTITION GRADUALLY, BY ADDING TO OUR KNOWLEDGE OF THE PARTITION ONE
14900 PAIR AT A TIME; HERE A PAIR IS <ELEMENT, CLASS:NAME>)
15000 WHY ( BECAUSE PUP MUST ENCODE A FUNCTION WHICH PARTITIONS A DOMAIN INTO CLASSES AND
15100 PARTITION:A:DOMAIN IS TOO GENERAL TO USE AS IT IS)
15200 MAIN:EFFECTS ((( PARTITIONED DOMAIN)
15300 ( PAD:2)))
15400 WHEN ((PARTITIONED:DOMAIN:LIST -100 ( BECAUSE WE ALREADY HAVE PARTITIONED DOMAIN))
15500 ((NULL PARTITIONED:DOMAIN:LIST)
15600 20
15700 ( BECAUSE PUP HAS NOT YET PARTITIONED DOMAIN, SO IT IS PLAUSIBLE TO DO IT NOW)))
15800 \4META:CODE\* (PROG NIL LABEL:1 (TAKE:HOLD:OF:3 ELEMENT:4)
15900 (COND ((HAS:NAME:5 ELEMENT:4 (COMMENT PARTITION:BY:TAKE:ELE:AND:CLASS))
16000 (PROGN (TAKE:HOLD:OF:6 NAME:OF:CLASS)
16100 (MODIFY:STRUCTURE:7 NAME:OF:CLASS)))
16200 (T (PROGN (GET:HOLD:OF:8 NAME:OF:CLASS)
16300 (MODIFY:STRUCTURE:9 NAME:OF:CLASS))))
16400 (COND ((IS:OF:TYPE:61 ARG1 (COMMENT BREAKAWAY))
16500 (COMMENT FINALIZATION OF LOOP STARTING AT LABEL:1 MAY GO HERE))
16600 (T (AND (FOREACH NAME IN SET:OF:POSSIBLE:NAMES:OF:CLASS DO
16700 (PROGN (PUPRINT NAME)
16800 (COND ((GETP NAME CLASS:OBJECTS:33)
16900 (PUPRIN1 "OBJECTS ")
17000 (PUPRINT (GETP NAME CLASS:OBJECTS:33))))
17100 (COND ((GETP NAME CLASS:YES:RELNS:35)
17200 (PUPRIN1 "MUST HAVE ")
17300 (PUPRINT (GETP NAME CLASS:YES:RELNS:35))))
17400 (COND ((GETP NAME CLASS:NO:RELNS:36)
17500 (PUPRIN1 "MUSNT HAVE ")
17600 (PUPRINT (GETP NAME CLASS:NO:RELNS:36))))
17700 (COND ((GETP NAME CLASS:MAYBE:RELNS:37)
17800 (PUPRIN1 "MAY HAVE ")
17900 (PUPRINT (GETP NAME CLASS:MAYBE:RELNS:37))))
18000 (TERPRI)
18100 T))
18200 (GO LABEL:1))))
18300 (COMMENT COMMENT SEE: THERE IS NO INFINITE LOOP IN THIS PROG AFTER ALL; WE ARE
18400 EXITING IT!))
18500 DEMONS ( FRINGE:OF:CONCIOUSNESS:DEMON)
18600 COMPLEXITY: (.8 .8 .8 .8 .1)
18700 GENERALIZATIONS (PARTITION:A:DOMAIN MAP BUILD:FUNCTION)
18800 SPECIALIZATIONS NIL
18900 ALTERNATIVES ( DIVIDE:UP DISCRETIZE)
19000 BEING T
19100 EXPLICIT:ARGS (DUMMY:ARGUMENT:3 DUMMY:ARGUMENT:2 DUMMY:ARGUMENT:1)
19200 AFFECTS ( ( ELEMENT:4 POSSIBLE CALLED)
19300 ( ELEMENT:4 POSSIBLE CALLED)
19400 ( IN POSSIBLE CALLED)))
19500
19600 \4Here are the hand versions of INPUT:1:ELEMENT and HAS:NAME\*
19700
19800 (INPUT:1:ELEMENT
19900 [LAMBDA NIL
20000 (PRINT (QUOTE (I AM READY FOR A SCENE)))
20100 (SETQ ELEMENT (READ))
20200 (SETQ LIST:OF:OBJECTS:OF:ELEMENT (CORRESPONDING:OBJECTS:PART))
20300 (SETQ SET:OF:RELATIONS (CORRESPONDING:RELATIONS:PART))
20400 (SETQ CLASS:NAME (CAR ELEMENT])
20500
20600 (HAS:NAME
20700 [LAMBDA NIL
20800 (NOT (EQUAL (CAR ELEMENT)
20900 (QUOTE ?])
21000
21100 \4The PUP6 versions include extra BEINGS, STATIC:SCENE and ELEMENT, which
21200 have no control function; rather, their role is analogous to a data
21300 structure. PUP6 uses the name TAKE:HOLD:OF:3 instead of INPUT:1:ELEMENT.\*
21400
21500 (PUTPROPS STATIC:SCENE:10 IDEN ((( ( (EQUAL LI (LIST STATIC:SCENE:10))))
21600 ( STATIC:SCENE:10)))
21700 \4META:CODE\* (STRUCTURE (OBJECTS SET O)
21800 (CLASS:NAME NAME N)
21900 (STATIC RELATIONS S BETWEEN OBJECTS))
22000 COMPLEXITY: (.8 .8 .8 .8 .1)
22100 DATA:STRUCTURE T
22200 BEING T
22300 WHAT ( A SPECIALIZED BEING WHICH DOES NIL)
22400 WHY (SCENE IS TOO GENERAL TO USE AS IT IS)
22500 GENERALIZATIONS (SCENE)
22600 (PUTPROPS ELEMENT:4 IDEN ((( ( (EQUAL ( ELEMENT:4)
22700 LI)))
22800 ( ELEMENT:4)))
22900 EXPLICIT:ARGS:CHECK T
23000 WHAT ( A SPECIALIZED BEING WHICH DOES
23100 ( A STRUCTURE WHICH IS A MEMBER OF A LARGER STRUCTURE))
23200 COMPLEXITY: (.8 .8 .8 .8 .1)
23300 DATA:STRUCTURE (ACCESS (((SOME:PART:OF:16 X)
23400 ACCESSES
23500 (STATIC RELATIONS S BETWEEN OBJECTS))
23600 ((SOME:PART:OF:14 X)
23700 ACCESSES
23800 (CLASS:NAME NAME N))
23900 ((SOME:PART:OF:12 X)
24000 ACCESSES
24100 (OBJECTS SET O))))
24200 BEING T
24300 EXPLICIT:ARGS (DUMMY:ARGUMENT:3 DUMMY:ARGUMENT:2 DUMMY:ARGUMENT:1)
24400 WHY (ELEMENT IS TOO GENERAL TO USE AS IT IS)
24500 \4META:CODE\* (STRUCTURE (OBJECTS SET ELEMENT:OBJECTS:11)
24600 (CLASS:NAME NAME ELEMENT:CLASSNAME:13)
24700 (STATIC RELATIONS ELEMENT:RELNS:15 BETWEEN OBJECTS))
24800 GENERALIZATIONS (ELEMENT)
24900 (PUTPROPS HAS:NAME:5 EXPLICIT:ARGS (ARG1 DUMMY:ARGUMENT:2 DUMMY:ARGUMENT:1)
25000 EXPLICIT:ARGS:CHECK T
25100 WHAT ( A SPECIALIZED BEING WHICH DOES ( SEE IF ( ARG1)
25200 IS OF THE TYPE SPECIFIED. THE PARTICULAR TYPE
25300 IS DELINEATED BY THE SPECIAL KNOWLEDGE
25400 ( DUMMY:ARGUMENT:2)))
25500 HOW ( USE ( DUMMY:ARGUMENT:2)
25600 DETAILS TO SEE IF IT CONTAINS ( ARG1))
25700 WHY ( WE MUST BE ABLE TO TEST AN ARG1 ( ARG1)
25800 AND SEE IF IT BELONGS TO THE TYPE ( DUMMY:ARGUMENT:2)
25900 AND IS:OF:TYPE IS TOO GENERAL TO USE AS IT IS)
26000 \4META:CODE\* (PROGN (COMMENT IN ALL CALLS TO DATE, ARG1 IS INSTANTIATED AS ELEMENT:4)
26100 (NOT (EQUAL (CAR ARG1)
26200 ???)))
26300 COMPLEXITY: (.8 .8 .8 .8 .1)
26400 SPECIALIZATIONS NIL
26500 PREDICATE T
26600 BEING T
26700 GENERALIZATIONS (IS:OF:TYPE)
26800 AFFECTS ( ( IN POSSIBLE CALLED)
26900 ( ELEMENT:4 POSSIBLE CALLED)))
27000 (PUTPROPS TAKE:HOLD:OF:3 EXPLICIT:ARGS (ARG1)
27100 EXPLICIT:ARGS:CHECK T
27200 NLAMBDA T
27300 WHAT ( A SPECIALIZED BEING WHICH DOES ( TAKE THE ARG1 ( ARG1)
27400 IN A TRIVIAL WAY; EITHER BY ACCESSING IT
27500 OR BY READING IT IN))
27600 HOW ( LOOK AROUND A LITTLE; IF IT ISNT FOUND TRIVIALLY, THEN ASK THE USER TO GIVE
27700 ( ARG1)
27800 TO US)
27900 WHY ( PUP WANTS ( ARG1)
28000 ,AND WE DON'T HAVE TO DO ANY COMPUTING TO GET IT AND TAKE:HOLD:OF IS TOO GENERAL
28100 TO USE AS IT IS)
28200 COMPLEXITY: (.8 .8 .8 .8 .1)
28300 BEING T
28400 \4META:CODE\* (PROGN (COMMENT IN ALL CALLS TO DATE, ARG1 IS INSTANTIATED AS ELEMENT:4)
28500 (PROGN (PUPRINT (COMMENT READY TO ACCEPT BRAND NEW ELEMENT:4))
28600 (SET ARG1 (PREAD))
28700 (SETQ ELEMENT:OBJECTS:11 (SOME:PART:OF:12 (EVAL ARG1)))
28800 (SETQ ELEMENT:CLASSNAME:13 (SOME:PART:OF:14 (EVAL ARG1)))
28900 (SETQ ELEMENT:RELNS:15 (SOME:PART:OF:16 (EVAL ARG1)))
29000 T))
29100 GENERALIZATIONS (TAKE:HOLD:OF)
29200 AFFECTS (
29300 ( ELEMENT:4 POSSIBLE CALLED)
29400
29500 ( ELEMENT:OBJECTS:11 POSSIBLE CALLED)
29600 ( ELEMENT:CLASSNAME:13 POSSIBLE CALLED)
29700 ( ELEMENT:RELNS:15 POSSIBLE CALLED)))
29800
29900 \4The following is a very low-level function, which must insert
30000 a key contradictory feature into a model's NO relation set.\*
30100
30200 (DELETE:1:3:1
30300 [LAMBDA NIL
30400 (PROG (TEMPORARY:NO:RELATIONS)
30500 (SETQ TEMPORARY:NO:RELATIONS (GETP CLASS:NAME NO:RELATIONS))
30600 (SETQ TEMPORARY:NO:RELATIONS (PULLOUT RELATION
30700 TEMPORARY:NO:RELATIONS))
30800 (PUT CLASS:NAME NO:RELATIONS TEMPORARY:NO:RELATIONS])
30900
31000 \4The version PUP6 writes includes the test as well: there must be
31100 some feature in the current NO relations set which is also present
31200 in the scene (that is, located on the list ELEMENT:RELNS:15).\*
31300
31400 (PUTPROPS CONDITIONAL:DELETION:54 IDEN ((( ( ( ( ( (EQUAL (CAR LI)
31500 (QUOTE DELETE)))))))
31600 ( CONDITIONAL:DELETION:54 (TRANSLATE (IN (CDR LI))
31700 T))))
31800 EXPLICIT:ARGS (DUMMY:ARGUMENT:2 DUMMY:ARGUMENT:1)
31900 EXPLICIT:ARGS:CHECK T
32000 WHAT ( A SPECIALIZED BEING WHICH DOES
32100 ( PERHAPS WE WILL REMOVE AN ELEMENT FROM CLASS:NO:RELNS:29 ,
32200 SOMETHING IN BOTH ELEMENT:RELNS:15
32300 AND ALREADY ON THE CLASS:NO:RELNS:29 LIST
32400 IF SUCH AN ENTITY CAN BE FOUND))
32500 HOW ( WE WILL SEARCH FOR SUCH AN ELEMENT, AND USE PULLOUT)
32600 WHY ( IT WOULD BE CONTRADICTORY FOR SUCH AN ELEMENT TO REMAIN ON THIS LIST
32700 IF IT IS ON THE LIST AND ALSO ON THE ELEMENT:RELNS:15 LIST AT THE SAME
32800 TIME. WE HAD TO SPECIALIZE TO THE CONDITIONAL:DELETION BEING BECAUSE
32900 AND CONDITIONAL:DELETION IS TOO GENERAL TO USE AS IT IS)
33000 \4META:CODE\* (PROGN (SETQ RESULT:6 (SETINTERSECTION (GETP NAME:OF:CLASS
33100 CLASS:NO:RELNS:36)
33200 ELEMENT:RELNS:15))
33300 (COND (RESULT:6 (PUT NAME:OF:CLASS CLASS:NO:RELNS:36
33400 (PULLOUT RESULT:6 (GETP NAME:OF:CLASS
33500 CLASS:NO:RELNS:36))))
33600 (T (SETQ RESULT:6 NIL))))
33700 COMPLEXITY: (.8 .8 .8 .8 .1)
33800 GENERALIZATIONS (CONDITIONAL:DELETION MODIFY:STRUCTURE)
33900 BEING T
34000 AFFECTS ( ( ELEMENT:RELNS:15 POSSIBLE CALLED)))
00100 .NEXT PAGE
00200 .SELECT 5
00300 \4 FLOW CHART, INCLUDING NAMES OF MAJOR FUNCTIONS\*
00400 .B
00500
00600 ⊂αααα⊃ ⊂ααααααααααααααααααααααα⊃
00700 ~ CF εααααα→λ (INITIALIZE:1) ~
00800 %αααα$ %ααααααααααπαααααααααααα$
00900 ~
01000 ~ enter the PARTITION:A:DOMAIN loop
01100 ~
01200 ⊂α⊃ ⊂αααααααααα↓αααααααααααα⊃
01300 ~1εααα→λ Accept the description~
01400 %α$ ~ of a scene ~ ⊂α⊃
01500 ⊂αααααααααα→λ (INPUT:1:ELEMENT) ~ ~2~
01600 ~ %ααααααααααπαααααααααααα$ %π$
01700 ~ ~ ~
01800 ~ ~ ~
01900 ~ ⊂αααααααααα↓αααααααααααα⊃ ⊂αααααααααα↓αααααααααααα⊃
02000 ~ ~ Does the scene have a ~ YES ~ Has the scene been ~ YES
02100 ~ ~ name? εαααα→λ previously described? εααααα⊃
02200 ~ ~ (HAS:NAME) ~ ⊂α→λ(CHECKαFORαOLDαNAME) ~ ↓
02300 ~ %ααααααααααπαααααααααααα$ ↑ %ααααααααααπαααααααααααα$ ~
02400 ~ ~NO ~ ~NO ~
02500 ~ ~ ~ ~ ~
02600 ~ ~ ~ ⊂αααααααααα↓αααααααααααα⊃ ~
02700 ~ ~ ~ ~ Insert the description~ ~
02800 ~ ~ (NOαGUESS)~ ~ of the scene in the ~ ~
02900 ~ ~ AND SCENE~ ~ object list ~ ~
03000 ~ ~ DEFINED ~ ~ (NEWαNAME) ~ ~
03100 ~ ~ ⊂αααα$ %ααααααααααπαααααααααααα$ ~
03200 ~ ~ ~ ~ ~
03300 ~ ~ ~ ~ ~
03400 ~(NOαGUESS) ⊂αααααααααα↓αααααααααα↑α⊃ ⊂↓⊃ ~
03500 ~AND SCENE ~ Make a guess at what ~ GUESS ~1~ ~
03600 ~UNDEFINED ~the object is, based on~ CORRECTLY %↑$ ~
03700 ~←ααααααααααλ previous scenes ε→αααααααα⊃ ~ ~
03800 ~ ~ (DETERMINE:CLASSNAME) ~ ~ ~ ~
03900 ~ %ααααααααααααααααααααααα$ ⊂αα↓αααααα↑ααααααααααααα⊃ ~
04000 ~ ~MADE WRONG ~ Correlate this scene ~ ~
04100 ~ ~GUESS ~ with other scenes ~←ααα$
04200 ~ ⊂αααααααααα↓αααααααααααα⊃ ~(PATCHαOLDαDESCRIPTION)~
04300 ~SCENE ~ Put in MUSTs and ~ %ααααααααααααααααααααααα$
04400 ~UNDEFINED ~ MUSNTs on scene ~ ⊂α⊃
04500 %αααααααααα←λ differences εαα→λ2~
04600 ~ (TIGHTENαCONSTRAINTS) ~ %α$
04700 %ααααααααααααααααααααααα$
04800 .E